#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright @ 2014 OPS, Qunar Inc. (qunar.com)
#
# Author: tingfang.bao <tingfang.bao@qunar.com>
# DateTime: 15-3-6 下午6:07
from flask import Flask, render_template
from flask.views import View

app = Flask(__name__)


# noinspection PyMethodMayBeStatic
class ListView(View):
    def get_template_name(self):
        raise NotImplementedError()

    def dispatch_request(self):
        context = {"objects": self.get_objects()}
        return self.render(context)

    def get_objects(self):
        raise NotImplementedError()

    def render(self, context):
        return render_template(self.get_template_name(), **context)


class UserView(ListView):
    # 该视图只能接受POST,GET方法
    methods = ['POST', 'GET']

    def get_template_name(self):
        return 'users.html'

    def get_objects(self):
        return [u'小明', u'小王']


class RenderTemplate(View):
    def __init__(self, template_name):
        super(RenderTemplate, self).__init__()
        self.template_name = template_name

    def dispatch_request(self):
        return render_template(self.template_name)


app.add_url_rule('/users', view_func=UserView.as_view('user_view'))

# 可以注册很多页面了
# 解释一下add_url_rule
# 第一个参数:路由信息，必填
# as_view(): 第一个参数，视图名称，后面根视图类__init__的参数列表
app.add_url_rule('/about', view_func=RenderTemplate.as_view('about', template_name='about.html'))

# /pages/test1
# 可以实现直接访问pages目录下的html文件，相当于静态页面了
@app.route('/pages/<page_name>')
def static_page(page_name):
    return render_template('pages/%s.html' % page_name)


if __name__ == '__main__':
    app.debug = True
    app.run(host='0.0.0.0', port=8080)